import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

import {checkLogin} from "../api/user";
// // 引入axios
// import request from './assets/js/http';

const store = new Vuex.Store({
    strict: true,
    // 是状态也是数据
    state: {
        // 默认检验登录为false
        isLogin: false,
        // 用户信息
        userInfo: {},
    },
    // 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。
    /*定义同步操作，不需要和后端进行交互*/
    mutations: {
        // 如果检验登录返回200则调用此函数更新用户信息并且把登录状态修改为true
        // 你可以向 store.commit 传入额外的参数，即 mutation 的载荷（payload）
        //store.commit('updateUserInfo', info.data.data.userInfo);
        // 在大多数情况下，载荷应该是一个对象，这样可以包含多个字段并且记录的 mutation 会更易读
        updateUserInfo(state, payload) {
            state.userInfo = payload;
            state.isLogin = true;
        },
        // 注销
        logout(state) {
            // 情况状态的用户信息
            state.userInfo = {};
            // 把isLogin修改为false
            state.isLogin = false;
        }
    },
    /*定义异步操作数据的操作，需要和后端进行交互*/
    actions: {
        
        // 刷新还能保持登录状态
        // 检验登录状态
        async checkLogin(store) {
            // let url = 'user/checkLogin';
            // 获取验证登录方法返回的结果
            let info = await checkLogin();
            // let info = await request.post(url);
            console.log(info);

            // 如果返回200
            if (info.data.statusCode == 200) {
                localStorage.setItem('token', info.data.data.token);
                // 调用mutations里的updateUserInfo方法
                // 不能直接调用一个 mutation 处理函数。这个选项更像是事件注册：“当触发一个类型为 updateUserInfo 的 mutation 时，调用此函数。”要唤醒一个 mutation 处理函数，你需要以相应的 type 调用 store.commit 方法：
                // 你可以向 store.commit 传入额外的参数，即 mutation 的载荷（payload）
                // 在大多数情况下，载荷应该是一个对象，这样可以包含多个字段并且记录的 mutation 会更易读
                store.commit('updateUserInfo', info.data.data.userInfo);

            } else if(info.data.statusCode == 401) {
                /*token失效*/
                // Vue.prototype.$notify({type:'danger', message:'请登录后在操作！'});
                localStorage.removeItem('token');
                store.commit('logout');
            }
        }
    },
    getters: {}
})
// 暴露store
export default store
